88942c7e7477d1d873b7848351a71c3caf0b8cd3,plugins/groovy/src/org/jetbrains/plugins/groovy/lang/parser/parsing/statements/expressions/arithmetic/PathExpression.java,PathExpression,pathElementParse,#PsiBuilder#PsiBuilder.Marker#GroovyParser#GroovyElementType#,75

Before Change


      else {
        PsiBuilder.Marker newMarker = marker.precede();
        marker.done(PATH_METHOD_CALL);
        pathElementParse(builder, newMarker, parser, qualifierType);
      }
    }
    else if (mLCURLY.equals(builder.getTokenType())) {
      appendedBlockParse(builder, parser);
      if (mLCURLY.equals(builder.getTokenType())) {
        pathElementParse(builder, marker, parser, qualifierType);
      }
      else {
        PsiBuilder.Marker newMarker = marker.precede();
        marker.done(PATH_METHOD_CALL);
        pathElementParse(builder, newMarker, parser, PATH_METHOD_CALL);
      }
    }
    else if (mLBRACK.equals(builder.getTokenType()) &&
             !ParserUtils.lookAhead(builder, mLBRACK, mCOLON) &&
             !ParserUtils.lookAhead(builder, mLBRACK, mNLS, mCOLON)) {
      indexPropertyArgsParse(builder, parser);
      PsiBuilder.Marker newMarker = marker.precede();
      marker.done(PATH_INDEX_PROPERTY);
      if (mLCURLY.equals(builder.getTokenType())) {
        PsiBuilder.Marker argsMarker = builder.mark();
        argsMarker.done(ARGUMENTS);
      }
      pathElementParse(builder, newMarker, parser, PATH_INDEX_PROPERTY);
    }
    else {
      marker.drop();

After Change



  private static final TokenSet DOTS = TokenSet.create(mSPREAD_DOT, mOPTIONAL_DOT, mMEMBER_POINTER, mDOT);

  private static Result pathElementParse(PsiBuilder builder,
                                                    PsiBuilder.Marker marker,
                                                    GroovyParser parser,
                                                    GroovyElementType qualifierType,
                                                    Result result) {

    GroovyElementType res;

    // Property reference
    if (DOTS.contains(builder.getTokenType()) || ParserUtils.lookAhead(builder, mNLS, mDOT)) {
      if (ParserUtils.lookAhead(builder, mNLS, mDOT)) {
        ParserUtils.getToken(builder, mNLS);
      }
      ParserUtils.getToken(builder, DOTS);
      ParserUtils.getToken(builder, mNLS);
      TypeArguments.parse(builder);
      if (kNEW.equals(builder.getTokenType())) {
        res = PrimaryExpression.newExprParse(builder, parser, marker);
      }
      else if (kTHIS.equals(builder.getTokenType()) || kSUPER.equals(builder.getTokenType())) {
        res = parseThisSuperExpression(builder, qualifierType);
      }
      else {
        res = namePartParse(builder, parser);
      }
      if (!res.equals(WRONGWAY)) {
        PsiBuilder.Marker newMarker = marker.precede();
        marker.done(res);
        if (mLCURLY.equals(builder.getTokenType())) {
          PsiBuilder.Marker argsMarker = builder.mark();
          argsMarker.done(ARGUMENTS);
        }
        result = pathElementParse(builder, newMarker, parser, res, OK);
      }
      else {
        builder.error(GroovyBundle.message("path.selector.expected"));
        marker.drop();
      }
    }
    else if (mLPAREN.equals(builder.getTokenType())) {
      PrimaryExpression.methodCallArgsParse(builder, parser);
      if (mLCURLY.equals(builder.getTokenType()) || ParserUtils.lookAhead(builder, mNLS, mLCURLY)) {
        ParserUtils.getToken(builder, mNLS);
        result = pathElementParse(builder, marker, parser, qualifierType, OK);
      }
      else {
        PsiBuilder.Marker newMarker = marker.precede();
        marker.done(PATH_METHOD_CALL);
        result = pathElementParse(builder, newMarker, parser, qualifierType, OK);
      }
    }
    else if (mLCURLY.equals(builder.getTokenType())) {
      appendedBlockParse(builder, parser);
      if (mLCURLY.equals(builder.getTokenType())) {
        result = pathElementParse(builder, marker, parser, qualifierType, result);
      }
      else {
        PsiBuilder.Marker newMarker = marker.precede();
        marker.done(PATH_METHOD_CALL);
        result = pathElementParse(builder, newMarker, parser, PATH_METHOD_CALL, result);
      }
    }
    else if (checkForArrayAccess(builder)) {
      indexPropertyArgsParse(builder, parser);
      PsiBuilder.Marker newMarker = marker.precede();
      marker.done(PATH_INDEX_PROPERTY);
      final boolean lCurly = mLCURLY.equals(builder.getTokenType());
      if (lCurly) {
        PsiBuilder.Marker argsMarker = builder.mark();
        argsMarker.done(ARGUMENTS);
      }
      result = pathElementParse(builder, newMarker, parser, PATH_INDEX_PROPERTY, lCurly?CALL_WITH_CLOSURE : OK);
    }
    else {
      marker.drop();